package cn.chen.数据结构.哈希表;

// 哈希表
public class HashEmp {

    private int maxSize;
    EmpLinkedList [] hashEmp;

    public HashEmp(int maxSize) {
        this.maxSize = maxSize;
        hashEmp=new EmpLinkedList[this.maxSize];
    }

    // 删除方法
    public Emp remove(int id){

        int index=hashCodeValue(id);
        if(hashEmp[index]==null){   // 该索引位置的链表为空，直接返回null

            System.out.println("没有该元素");
            return null;
        }
        return hashEmp[index].removeEmp(id);
    }
    // 查找方法
    public Emp getEmp(int id){

        int index=hashCodeValue(id);
        if(hashEmp[index]==null){   // 该索引位置的链表为空，直接返回null

            System.out.println("没有该元素");
            return null;
        }
        return hashEmp[index].getEmp(id);
    }

    // 添加方法
    public void add(Emp emp){

        // 将元素添加到数组中，数组将元素添加到链表中
        int index=hashCodeValue(emp.id);    // 获取id对应的index
        if(hashEmp[index]==null){   // 这个地方要注意，如果要往引用对象的数组中存放数据，必须先创建对象，将对象加入到引用对象中，才能调用引用对象的方法和属性

            EmpLinkedList list=new EmpLinkedList();
            hashEmp[index]=list;
        }
        hashEmp[index].addEmp(emp);
    }
    // 显示哈希表
    public void showHash(){

        for(EmpLinkedList list:hashEmp){

            if(list!=null){

                list.showEmps();    //调用链表的显示方法
            }
        }
    }
    // 散列函数
    public int hashCodeValue(int id){

        return id%maxSize;  // 通过对maxSize%,可以得到0-maxSize-1的数据，这就是数组的下标
    }

}
